package com.gxc.array;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * 给定一组闭区间，其中部分区间存在交集。
 *
 * 任意两个给定区间的交集，称为公共区间(如:[1,2],[2,3]的公共区间为[2,2]，[3,5],[3,6]的公共区间为[3,5])。
 *
 * 公共区间之间若存在交集，则需要合并(如:[1,3],[3,5]区间存在交集[3,3]，需合并为[1,5])。
 *
 * 按升序排列输出合并后的区间列表。
 *
 * 输入描述
 * 一组区间列表，
 *
 * 区间数为 N: 0<=N<=1000;
 *
 * 区间元素为 X: -10000<=X<=10000。
 *
 * 备注
 * 区间元素均为数字，不考虑字母、符号等异常输入。
 * 单个区间认定为无公共区间。
 * 输出描述
 * 升序排列的合并区间列表
 */
public class Interval1 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        if (n == 1) {
            System.out.println("None");
            return;
        }
        List<int[]> intervals = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            int start = scanner.nextInt();
            int end = scanner.nextInt();
            intervals.add(new int[]{start, end});
        }
        scanner.close();

        // 按起点排序，若起点相同则按终点排序
        intervals.sort(Comparator.comparingInt((int[] a) -> a[0]).thenComparingInt(a -> a[1]));

        List<int[]> combined = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            int[] one = intervals.get(i);
            for (int j = i + 1; j < n; j++) {
                int[] two = intervals.get(j);
                if (two[0] <= one[1]) {
                    combined.add(new int[]{two[0], Math.min(one[1], two[1])});
                } else {
                    break;
                }
            }
        }

        if (combined.isEmpty()) {
            System.out.println("None");
            return;
        }

        combined.sort(Comparator.comparingInt((int[] a) -> a[0]).thenComparingInt(a -> a[1]));

        int[] prev = combined.get(0);
        for (int i = 1; i < combined.size(); i++) {
            int[] curr = combined.get(i);
            if (prev[1] >= curr[0]) {
                prev[1] = Math.max(prev[1], curr[1]);
            } else {
                System.out.println(prev[0] + " " + prev[1]);
                prev = curr;
            }
        }
        System.out.println(prev[0] + " " + prev[1]);
    }

}
